$(document).ready(function(){
    initMask();
    initEnviar();
    initGrid();
    iniBusca();
    removedespesa();
    initDataPicker();
});

function initMask(){
    $("input[alt]").setMask();
}

function initGrid(){
    $("#flex1").flexigrid({
        url: '/despesa/consulta/lista',
        dataType: 'xml',
        colModel : [
            {display: 'Id', name : 'codigo', width : 80, sortable : true, align: 'center'},
            {display: 'Descrição', name : 'descricao', width : 250, sortable : true, align: 'left'},
            {display: 'Data Cadastro', name : 'dt_cadastro', width : 180, sortable : true, align: 'center'},
            {display: 'Valor', name : 'valor', width : 150, sortable : true, align: 'center'},
            {display: 'Data Vencimento', name : 'dt_vencimento', width : 150, sortable : true, align: 'center'},
            {display: 'Data Pagamento', name : 'dt_pagamento', width : 160, sortable : true, align: 'center'},
            {display: 'Tipo Despesa', name : 'tipo_despesa', width : 150, sortable : true, align: 'center'}
        ],
        buttons : [
            {name: 'Add', bclass: 'add', onpress : adicionar},
            {name: 'Edit', bclass: 'add', onpress : edita},
            {separator: true}
        ],
        searchitems : [
            {display: 'Id', name : 'codigo'},
            {display: 'Descrição', name : 'descricao', isdefault: true}
        ],
        sortname: "codigo",
        sortorder: "asc",
        usepager: true,
        title: 'Despesas',
        useRp: true,
        rp: 15,
        showTableToggleBtn: true,
        width: 1200,
        height: 200
    }); 
}

function initEnviar(){
    $("#btnEnviar").live("click",function(event){
        event.preventDefault();
        removeMsgErro('initEnviar');
        
        if(!validaForm()){
            $.ajax({
                url: '/despesa/insere/valida',
                data: dataSend(),
                dataType: 'Json',
                type: 'POST',
                contentType: "application/x-www-form-urlencoded;charset=UTF-8",
                beforeSend: function(){
                },
                success: function(data){
                    if(!isEmpty(data.erros)){
                        for (i = 0; i < data.erros.length; i++) {
                            exibeMsgErro(data.erros[i], 'initEnviar');
                        }
                    }else{
                        $("#pesquisa_conteudo_form").submit();
                    }
                },
                error: function(){
                }
            });
        }
    });
}

function dataSend(){
    return $("#pesquisa_conteudo_form input,#pesquisa_conteudo_form select").serialize();
}

function removedespesa(){
    $('#btnExcluir').live('click',function(){
        var answer = confirm("Tem certeza que deseja excluir?");
        if (answer){
            removeMsgErro('exclui1');
            var busca = $("#codigo").val();

            if(isEmpty(busca)){
                exibeMsgErro('É necessário selecionar um registro para ser removido.', 'exclui1');
            }else{
                window.location = '/despesa/insere/delete?codigo=' + busca;
            }
        }
    });
}

function edita(){
    removeMsgErro('edita1');
    var busca = $(".trSelected td[abbr='codigo'] div");

    if(busca.length == 0){
        exibeMsgErro('É necessário selecionar um registro para editar.', 'edita1');
    }else if(busca.length > 1){
        exibeMsgErro('É necessário somente um registro para editar.', 'edita1');
    }else if(isNaN(busca.html() * 1)){
        exibeMsgErro('Não é possível editar esse registro.', 'edita1');
    }else{
        window.location = '/despesa/edita?codigo=' + busca.html();
    }
}

function initDataPicker(){
    $('#dt_vencimento,#dt_pagamento').datepicker();
}

function validaForm(){
    removeMsgErro(new Array("validaForm1","validaForm2","validaForm3","validaForm4"));
    var erro = false;
    if(isEmpty($("#descricao").val())){
        exibeMsgErro("É necessário preencher o campo 'Nome da Despesa''","validaForm1" );
        erro = true;
    }
    
    if(isEmpty($("#dt_vencimento").val())){
        exibeMsgErro("É necessário preencher o campo 'Data de Vencimento'","validaForm2" );
        erro = true;
    }else if(!dateIsValid($("#dt_vencimento").val())){
        exibeMsgErro("O campo 'Data de Vencimento' contém uma data inválida.","validaForm2" );
        erro = true;
    }
    
    if(isEmpty($("#dt_pagamento").val())){
        exibeMsgErro("É necessário preencher o campo 'Data de Pagamento'","validaForm3" );
        erro = true;
    }else if(!dateIsValid($("#dt_pagamento").val())){
        exibeMsgErro("O campo 'Data Pagamento' contém uma data inválida.","validaForm3" );
        erro = true;
    }
    
    if(isEmpty($("#tipo_despesa").val())){
        exibeMsgErro("É necessário preencher o campo 'Tipo de Despesa'","validaForm4" );
        erro = true;
    }
    
    return erro;
}

function adicionar(){
    window.location = '/despesa/insere';
}


function iniBusca(){
    $('#btnConsulta').live('click',function(event){
        event.preventDefault();
        removeMsgErro(new Array("iniBusca1","iniBusca2","iniBusca3","iniBusca4"));
        var erros = new Array();
        var dtEx = $('#dt_expiracao').val();
        var deCad = $('#dt_cadastro').val();
        var deVen = $('#dt_vencimento').val();
        var dePag = $('#dt_pagamento').val();
        
        if(!isEmpty(dtEx) && !dateIsValid(dtEx)){
            erros['iniBusca1'] = 'Data de Expiração não é válida.'; 
        }
        
        if(!isEmpty(deCad) && !dateIsValid(deCad)){
            erros['iniBusca2'] = 'Data de Expiração não é válida.'; 
        }
        
        if(!isEmpty(deVen) && !dateIsValid(deVen)){
            erros['iniBusca3'] = 'Data de Vencimento não é válida.'; 
        }
        
        if(!isEmpty(dePag) && !dateIsValid(dePag)){
            erros['iniBusca4'] = 'Data de Pagamento não é válida.'; 
        }
        
        if(erros.length > 0){
            exibeMsgErro(erros, null);
        }else{
            var dt = $('#pesquisa_conteudo_form input').serializeArray();
            $("#flex1").flexOptions({params: dt}).flexReload();
        }
        
    });
}